//package com.sunday.common.core.lambda;
//
//import com.sunday.common.core.lambda.toolkit.support.ColumnCache;
//import com.sunday.common.core.lambda.toolkit.support.SFunction;
//import com.sunday.common.core.utils.ClassUtils;
//import org.springframework.data.annotation.Id;
//import org.springframework.data.mongodb.core.mapping.Field;
//
//import java.util.HashMap;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * mongo 字段映射
// */
//public class MongoLambdaOperation {
//
//    private static final Map<String, Map<String, ColumnCache>> COLUMN_CACHE_MAP = new ConcurrentHashMap<>();
//
//    private static final ColumnMapperOperation OPERATION = new ColumnMapperOperation() {
//        @Override
//        public Map<String, ColumnCache> getColumnMap(Class<?> target) {
//            return COLUMN_CACHE_MAP.get(target.getName());
//        }
//
//        @Override
//        public Map<String, ColumnCache> createColumnCacheMap(Class<?> target) {
//            Map<String, ColumnCache> map = new HashMap<>();
//            java.lang.reflect.Field[] fields = ClassUtils.getClassFields(target);
//            for (java.lang.reflect.Field field : fields) {
//                //判定字段中包含 org.springframework.data.mongodb.core.mapping.Field 的注解
//                if (field.isAnnotationPresent(Field.class)) {
//                    String annotationValue = field.getAnnotation(Field.class).value();
//                    if (annotationValue.isBlank()) {
//                        annotationValue = field.getName();
//                    }
//                    map.put(field.getName(), ColumnCache.of(field.getName(), annotationValue));
//                }
//                //判定字段中包含 org.springframework.data.annotation.Id  的注解
//                else if (field.isAnnotationPresent(Id.class)) {
//                    map.put(field.getName(), ColumnCache.of(field.getName(), "_id"));
//                }
//            }
//            COLUMN_CACHE_MAP.put(target.getName(), map);
//            return map;
//        }
//    };
//
//    public static <T> String getColumnName(SFunction<T, ?> func) {
//        return OPERATION.getColumnName(func);
//    }
//
//}
